﻿using System;
using System.Collections.Generic;
using System.Text;
using Servidor.Documentos;
using Fwk.Datos;

namespace Servidor.Datos
{
    public class DatUsuario:Entidad
    {
        public DatUsuario()
        {
            Estructura = new DocUsuario();
        }
        public DocUsuario LeerUsuario(String userName) 
        {
            DocUsuario doc = new DocUsuario();
            Leer(doc, doc.Usuario.NombreUsuarioColumn, userName);          
          return doc;
        }
        public DocUsuarioVista LeerUsuarios()
        {
            DocUsuarioVista doc = new DocUsuarioVista();
            String SP =

            "SELECT " +
            "Usuario.ID_Usuario, Usuario.Login_Usuario, Usuario.Apellido_Usuario, Usuario.Nombre_Usuario, Usuario.Telefono_Usuario, Usuario.Direccion_Usuario, Usuario.ID_TipoDocumento, TipoDocumento.Descripcion_TipoDocumento, Usuario.NroDocumento_Usuario, Usuario.ID_Grupo,  Grupo.Descripcion_Grupo, Usuario.Clave_Usuario " +
            "FROM Grupo " +
            "INNER JOIN (TipoDocumento INNER JOIN Usuario ON TipoDocumento.[ID_TipoDocumento] = Usuario.[ID_TipoDocumento]) ON Grupo.[Id_Grupo] = Usuario.[ID_Grupo]";

            Leer(doc, SP);
            return doc;
        }

        public DocUsuarioVista LeerUsuarioFiltro(string nombre, string apellido, string dni, Guid idGrupo)
        {
            DocUsuarioVista doc = new DocUsuarioVista();

            String SP =
            "SELECT " +
            "Usuario.ID_Usuario, Usuario.Login_Usuario, Usuario.Apellido_Usuario, Usuario.Nombre_Usuario, Usuario.Telefono_Usuario, Usuario.Direccion_Usuario, Usuario.ID_TipoDocumento, TipoDocumento.Descripcion_TipoDocumento, Usuario.NroDocumento_Usuario, Usuario.ID_Grupo,  Grupo.Descripcion_Grupo, Usuario.Clave_Usuario " +
            "FROM Grupo " +
            "INNER JOIN (TipoDocumento INNER JOIN Usuario ON TipoDocumento.[ID_TipoDocumento] = Usuario.[ID_TipoDocumento]) ON Grupo.[ID_Grupo] = Usuario.[ID_Grupo] " +
            "WHERE Usuario.ID_Usuario IS NOT NULL ";
            if (!String.IsNullOrEmpty(nombre)) SP +=  " AND Usuario.Nombre_Usuario LIKE '*" + nombre + "*'";
            if (!String.IsNullOrEmpty(apellido)) SP += " AND Usuario.Apellido_Usuario LIKE '*" + apellido + "*'";
            if (!String.IsNullOrEmpty(dni)) SP += " AND Usuario.NroDocumento_Usuario LIKE '*" + dni + "*'";
            if (idGrupo != Guid.Empty) SP += " AND Usuario.ID_Grupo = '{" + idGrupo + "}'";
            Leer(doc, SP);
            return doc;
        }

        public DocUsuarioVista LeerUsuarioLogin(String UserName)
        {
            DocUsuarioVista doc = new DocUsuarioVista();
            String SP =

            "SELECT " +
            "Usuario.ID_Usuario, Usuario.Login_Usuario, Usuario.Apellido_Usuario, Usuario.Nombre_Usuario, Usuario.Telefono_Usuario, Usuario.Direccion_Usuario, Usuario.ID_TipoDocumento, TipoDocumento.Descripcion_TipoDocumento, Usuario.NroDocumento_Usuario, Usuario.ID_Grupo,  Grupo.Descripcion_Grupo, Usuario.Clave_Usuario " +
            "FROM Grupo " +
            "INNER JOIN (TipoDocumento INNER JOIN Usuario ON TipoDocumento.[ID_TipoDocumento] = Usuario.[ID_TipoDocumento]) ON Grupo.[Id_Grupo] = Usuario.[ID_Grupo]" +
            "WHERE Usuario.Login_Usuario =" + "'" + UserName + "'";

            Leer(doc, SP);
            return doc;
        }

        public Int32 LoginExistente(String login)
        {
            DocUsuarioVista doc = new DocUsuarioVista();
            String SP =
                "SELECT " +
            "Usuario.ID_Usuario, Usuario.Login_Usuario, Usuario.Apellido_Usuario, Usuario.Nombre_Usuario, Usuario.Telefono_Usuario, Usuario.Direccion_Usuario, Usuario.ID_TipoDocumento, TipoDocumento.Descripcion_TipoDocumento, Usuario.NroDocumento_Usuario, Usuario.ID_Grupo,  Grupo.Descripcion_Grupo, Usuario.Clave_Usuario " +
            "FROM Grupo " +
            "INNER JOIN (TipoDocumento INNER JOIN Usuario ON TipoDocumento.[ID_TipoDocumento] = Usuario.[ID_TipoDocumento]) ON Grupo.[Id_Grupo] = Usuario.[ID_Grupo]" +
                "WHERE Usuario.Login_Usuario =" + "'" + login + "'";

            Leer(doc, SP);

            if (doc.UsuarioVista.Rows.Count == 0)
            {
                return 0;
            }
            else { 
                return 1;
            }
        }

        public DocUsuarioVista LeerUsuarioPorId(Guid IDUsuario)
        {
            DocUsuarioVista doc = new DocUsuarioVista();
            String SP =

            "SELECT " +
            "Usuario.ID_Usuario, Usuario.Login_Usuario, Usuario.Apellido_Usuario, Usuario.Nombre_Usuario, Usuario.Telefono_Usuario, Usuario.Direccion_Usuario, Usuario.ID_TipoDocumento, TipoDocumento.Descripcion_TipoDocumento, Usuario.NroDocumento_Usuario, Usuario.ID_Grupo,  Grupo.Descripcion_Grupo, Usuario.Clave_Usuario " +
            "FROM Grupo " +
            "INNER JOIN (TipoDocumento INNER JOIN Usuario ON TipoDocumento.[ID_TipoDocumento] = Usuario.[ID_TipoDocumento]) ON Grupo.[Id_Grupo] = Usuario.[ID_Grupo]" +
            "WHERE Usuario.ID_Usuario =" + IDUsuario ;

            Leer(doc, SP);
            return doc;
        }
    }
}
